package com.mkl.system.controller;

import com.mkl.system.common.Constant;
import com.mkl.system.common.DataGridView;
import com.mkl.system.common.ResultObj;
import com.mkl.system.domain.Dept;
import com.mkl.system.service.DeptService;
import com.mkl.system.vo.DeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author king
 * @version 1.0
 * @date 2020/3/5 15:12
 */
@RestController
@RequestMapping("api/dept")
public class DeptController {
    @Autowired
    private DeptService deptService;

    /**
     * 查询部门
     *
     * @param deptVo dept
     * @return 返回结果
     */
    @RequestMapping("loadAllDept")
    public Object loadAllDept(DeptVo deptVo) {
        return deptService.queryAllDept(deptVo);
    }

    /**
     * 添加部门
     *
     * @param dept 部门
     * @return 返回结果
     */
    @PostMapping("addDept")
    public ResultObj addDept(Dept dept) {
        try {
            dept.setSpread(Constant.SPREAD_FALSE);
            dept.setAvailable(Constant.AVAILABLE_TRUE);
            deptService.saveDept(dept);
            return ResultObj.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.ADD_ERROR;
        }
    }

    /**
     * 查询部门的最大排序码
     *
     * @return 返回结果
     */
    @RequestMapping(value = "queryDeptMaxOrderNum", method = RequestMethod.GET)
    public Object queryDeptMaxOrderNum() {
        Integer maxValue = deptService.queryDeptMaxOrderNum();
        return new DataGridView(maxValue + 1);
    }

    /**
     * 根据部门id查询部门
     *
     * @param id 部门id
     * @return 返回部门
     */
    @GetMapping("getDeptById")
    public Object getDeptById(Integer id) {
        Dept dept = deptService.getById(id);
        return new DataGridView(dept);
    }

    /**
     * 修改部门
     *
     * @param dept 部门
     * @return 返回修改结果
     */
    @PostMapping("updateDept")
    public ResultObj updateDept(Dept dept) {
        try {
            deptService.updateDept(dept);
            return ResultObj.UPDATE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.UPDATE_ERROR;
        }
    }

    /**
     * 根据当前id查询当前部门子部门的个数
     *
     * @param id 部门id
     * @return 数量
     */
    @GetMapping("getDeptChildrenCountById")
    public Object getDeptChildrenCountById(Integer id) {
        Integer count = deptService.getDeptChildrenCountById(id);
        return new DataGridView(count);
    }

    /**
     * 根据id删除部门
     *
     * @param id 部门id
     * @return 返回结果
     */
    @RequestMapping("deleteDept")
    public ResultObj deleteDept(Integer id) {
        try {
            deptService.removeById(id);
            return ResultObj.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.DELETE_ERROR;
        }
    }


}
